package com.cy.pj.common.pool;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/*
 * 假设这是一个对象池
 * FAQ?
 * 1)当项目的启动类在启动时会将此类加载到内存中吗?会
 * (你怎么知道的,通过JVM参数:   -XX:+TraceClassLoading)*/
//@Scope("singleton")//默认作用域为单例作用域,
//此作用域通常会配合延迟加载使用
@Scope("prototype")//多例作用域,每次从spring请求类的实例都会创建新的对象
//@Lazy//延迟对象实例的创建,用的时候再去创建
// (多例作用域时不用写,因为多实例默认使用延迟加载)
@Component
public class ObjectPool {
    public ObjectPool() {
        System.out.println("ObjectPoll()");
    }
    //生命周期初始化方法,构造方法后之后执行,可以在方法内部作用一些初始化
    @PostConstruct
    public void a() {
        System.out.println("a()");
    }
    //生命周期销毁方法,对象销毁之前执行,可以在对象销毁前做一些资源释放操作
    @PreDestroy
    public void b() {
        System.out.println("b()");
    }
}